﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//int main()
//{
//	int a = 10;
//	printf("%d\n", sizeof(a));
//	printf("%d\n", sizeof a);
//	printf("%d\n", sizeof(int));
//	return 0;
//}

//int main()
//{
//	char arr1[3] = { 'a','b','c' };
//	char arr2[] = "abc";
//	printf("%d\n", strlen(arr1));
//	printf("%d\n", strlen(arr2));
//
//	printf("%zd\n", sizeof(arr1));
//	printf("%zd\n", sizeof(arr2));
//
//	return 0;
//}

//int main()
//{
//	int a[5] = { 1,2,3,4,5 };
//	int* ptr = (int*)(&a + 1);
//	printf("%d %d", *(a + 1), *(ptr - 1));
//	return 0;
//}

////在X86环境下
////假设结构体的⼤⼩是20个字节
////程序输出的结构是啥？
//struct Test
//{
//	int Num;
//	char* pcName;
//	short sDate;
//	char cha[2];
//	short sBa[4];
//}*p = (struct Test*)0x100000;
//int main()
//{
//	//结构体指针+1 ，跳过一个结构体
//	//0x100000+20  ->0x100014   十六进制
//	printf("%p\n", p + 0x1);
//	//整型值+1，就是+1 0x100000+1-->0x100001
//	printf("%p\n", (unsigned long)p + 0x1);
//	//0x100000+4     ->0x100004
//	printf("%p\n", (unsigned int*)p + 0x1);
//	return 0;
//}

//int main()
//{
//	/*注意：逗号表达式*/
//	int a[3][2] = { (0,1),(2,3),(4,5) };
//	int* p;
//	p = a[0];//等价于&a[0][0]
//	printf("%d", p[0]);
//	return 0;
//}

int main()
{
	int aa[2][5] = { 1,2,3,4,5,6,7,8,9,10 };
	int* ptr1 = (int*)(&aa + 1);
	int* ptr2 = (int*)(*(aa + 1));
	printf("%d %d", *(ptr1 - 1), *(ptr2 - 1));
	return 0;
}


////x86环境
//int main()
//{
//	int a[5][5];
//	int(*p)[4];//p是一个数组指针，p指向的数组是4个整型元素
//	p = a;
//	printf("%p %d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
//	return 0;
//}
